package com.booter.ws.valid;

import javax.validation.Constraint;
import javax.validation.Payload;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * maxSize: 文件大小限制,默认1M
 * mimeTypes：MIME类型
 * extensions：允许的扩展名
 * group : 用于指定这个约束条件属于哪(些)个校验组. 这个的默认值必须是Class<?>类型数组
 * payload:Bean Validation API 的使用者可以通过此属性来给约束条件指定严重级别. 这个属性并不被API自身所使用。
 * message()：这个属性被用来定义默认得消息模版, 当这个约束条件被验证失败的时候,通过此属性来输出错误信息。
 * constraint(validatedBy = FileValidator.class):自定义的约束器实现
 *
 * @Documented: 表示在对使用了该注解的类进行javadoc操作到时候, 这个标注会被添加到javadoc当中.
 * @Constraint(validatedBy = FileValidator.class): 指明使用哪个校验器(类) 去校验使用了此标注的元素
 * @Retention(RUNTIME): 表示这个标注信息是在运行期通过反射被读取的.
 * @Target({ METHOD, FIELD, ANNOTATION_TYPE }): 表示此注解可以被用在方法, 字段或者annotation声明上。
 */
@Documented
@Constraint(validatedBy = FileValidator.class)
//@Target({ ElementType.METHOD, ElementType.FIELD, ElementType.PARAMETER })
@Target({ElementType.METHOD, ElementType.FIELD, ElementType.ANNOTATION_TYPE, ElementType.CONSTRUCTOR, ElementType.PARAMETER, ElementType.TYPE_USE})
@Retention(RetentionPolicy.RUNTIME)
public @interface FileValid {
//    String message() default "{constraints.ValidFileMimeType.message}";
    String message() default "文件异常  ";
    Class<?>[] groups() default {};
    Class<? extends Payload>[] payload() default {};

    String[] extensions() default {};
    String[] mimeTypes() default {};
    long maxSize() default 1024 * 1024; // 默认最大1MB
}
